home *** CD-ROM | disk | FTP | other *** search
- #include "node.h"
-
- #define FALSE 0
- #define TRUE 1
-
- struct Node *FindNode ( struct NodeHead *NodeHead, int item)
- {
- register struct Node *RunNode = NodeHead->FirstNode;
- while ( RunNode)
- if( RunNode->Item==item) return RunNode;
- else RunNode = RunNode->NextNode;
- return 0;
- }
-
- int AddNode (struct NodeHead *NodeHead, int item)
- {
- register struct Node *NewNode;
-
- NewNode = (struct Node *) malloc (sizeof(struct Node));
- NewNode->Item = item;
- NewNode->NextNode = 0;
- NewNode->PrevNode = NodeHead->LastNode;
- if ( !NodeHead->count) NodeHead->FirstNode = NewNode;
- else NodeHead->LastNode->NextNode = NewNode;
- NodeHead->LastNode = NewNode;
-
- return ++NodeHead->count;
- }
-
- int DeleteNodeList ( struct NodeHead *NodeHead)
- {
- register struct Node *RunNode = NodeHead->FirstNode;
- int item = RunNode->Item;
-
- while ( RunNode) {
- DeleteNode ( NodeHead, item);
- item = GetNode ( NodeHead, item, GN_NEXT);
- }
- }
-
- int DeleteNode ( struct NodeHead *NodeHead, int item)
- {
- struct Node *DelNode;
-
- if (!(DelNode=FindNode(NodeHead,item))) return FALSE;
-
- if ( DelNode->PrevNode) DelNode->PrevNode->NextNode = DelNode->NextNode;
- if ( DelNode->NextNode) DelNode->NextNode->PrevNode = DelNode->PrevNode;
- if ( DelNode==NodeHead->FirstNode) NodeHead->FirstNode = DelNode->NextNode;
- if ( DelNode==NodeHead->LastNode) NodeHead->LastNode = DelNode->PrevNode;
- free ( DelNode);
- return --NodeHead->count;
- }
-
- int GetNode ( struct NodeHead *NodeHead, int item, int Mode)
- {
- struct Node *Node;
- int newitem;
-
- switch (Mode) {
- case GN_FIRST:
- if ( NodeHead->FirstNode) return NodeHead->FirstNode->Item;
- break;
- case GN_LAST:
- if ( NodeHead->LastNode) return NodeHead->LastNode->Item;
- break;
- }
- if (!(Node = FindNode (NodeHead,item))) return 0L;
- switch ( Mode) {
- case GN_NEXT:
- if ( Node->NextNode) return Node->NextNode->Item;
- break;
- case GN_PREV:
- if ( Node->PrevNode) return Node->PrevNode->Item;
- break;
- }
- return 0;
- }
-